// import com.alibaba.druid.sql.ast.SQLStatement;
// import com.alibaba.druid.sql.ast.statement.*;
// import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement;
// import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement;
// import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUpdateStatement;
#pragma once
#include "../../../../../utils/common_ptr.h"

class MySqlStatementType
{
public:
  // select statement
  static MySqlStatementType_ptr SELECT;
  // update statement
  static MySqlStatementType_ptr UPDATE;
  // insert statement
  static MySqlStatementType_ptr INSERT;
  // delete statement
  static MySqlStatementType_ptr DELETE;
  // while statement
  static MySqlStatementType_ptr WHILE;
  // begin-end
  static MySqlStatementType_ptr IF;
  // begin-end
  static MySqlStatementType_ptr LOOP;
  // begin-end
  static MySqlStatementType_ptr BLOCK;
  // declare statement
  static MySqlStatementType_ptr DECLARE;
  // select into
  static MySqlStatementType_ptr SELECTINTO;
  // case
  static MySqlStatementType_ptr CASE;

  static MySqlStatementType_ptr UNDEFINED;

  string_ptr name;
  uint64_t mask;

  MySqlStatementType();

  MySqlStatementType(uint64_t mask, string_ptr name);

  static MySqlStatementType_ptr getType(SQLStatement_ptr stmt);
};
